package cn.xorange.commons.system.service.platform.impl;

import cn.xorange.commons.core.basic.service.BaseService;
import cn.xorange.commons.system.entity.platform.SysMenu;
import cn.xorange.commons.system.entity.platform.SysProductMenu;
import cn.xorange.commons.system.entity.system.SysRoleMenu;
import cn.xorange.commons.system.entity.system.SysTenantMenu;
import cn.xorange.commons.system.mapper.platform.SysMenuMapper;
import cn.xorange.commons.system.mapper.platform.SysProductMenuMapper;
import cn.xorange.commons.system.mapper.system.SysRoleMenuMapper;
import cn.xorange.commons.system.mapper.system.SysTenantMenuMapper;
import cn.xorange.commons.system.service.platform.ISysMenuService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/**
 * @author : yangjian
 * date : 2024/8/1
 * description :
 */
@Service
public class SysMenuServiceImpl extends BaseService<SysMenu, SysMenuMapper> implements ISysMenuService {

    @Resource
    SysProductMenuMapper productMenuMapper;
    @Resource
    SysRoleMenuMapper roleMenuMapper;
    @Resource
    SysTenantMenuMapper tenantMenuMapper;

    @Override
    @Transactional(rollbackFor = RuntimeException.class)
    public int deleteById(Long menuId){
        // 删除套餐绑定的菜单
        SysProductMenu productMenu = new SysProductMenu();
        productMenu.setMenuId(menuId);
        this.productMenuMapper.del(productMenu);

        // 删除角色绑定菜单
        SysRoleMenu roleMenu = new SysRoleMenu();
        roleMenu.setMenuId(menuId);
        this.roleMenuMapper.del(roleMenu);
        // 删除租户自定义的菜单
        SysTenantMenu tenantMenu = new SysTenantMenu();
        tenantMenu.setMenuId(menuId);
        this.tenantMenuMapper.del(tenantMenu);
        // 删除菜单
        return super.deleteById(menuId);
    }

    @Override
    public boolean checkMenuNameUnique(SysMenu sysMenu) {
        SysMenu menu = new SysMenu();
        menu.setMenuName(sysMenu.getMenuName());
        menu.setParentId(sysMenu.getParentId());
        int num = mapper.count(menu);
        return num > 0;
    }

    ///**
    // * 菜单、功能、路由方法
    // * @param type 类型用途
    // *             menu 用于用户登陆菜单  menuType = "S,M" 不包含 button
    // *             funMenu 所有用户级别菜单包括button 用于用户维护 以及角色的 功能选择
    // *             funMenuOptions 包含button的菜单功能选择，用于赋权
    // * @param sysId
    // * @param menuName
    // * @param status
    // * @return
    // */
    //private List<SysMenu> getMenus(String type, Integer sysId, String menuName, String status){
    //    long tenantId = SecurityUtils.getTenantId();
    //    boolean isAdmin = false;//SecurityUtils.getIsAdmin();
    //    if (tenantId == SecurityConstants.DEFAULT_TENANT_ID && isAdmin){
    //        // 平台管理员只操作sys_menu表
    //        SysMenu sysMenu = new SysMenu();
    //        if (type.equals("funMenu")){
    //            if (Objects.nonNull(menuName)){
    //                sysMenu.where.like("menuName",menuName);
    //            }
    //            if(Objects.nonNull(sysId)){
    //                sysMenu.where.rightLike("treeNode",sysId + FieldConstants.TREE_SEPARATOR);
    //            }
    //            if (Objects.nonNull(status)){
    //                sysMenu.where.equal("status",status);
    //            }
    //        }else {
    //            if (type.equals("funMenuOptions")){
    //                sysMenu.selectColumn("menuId","parentId","menuName","icon");
    //                if(Objects.nonNull(sysId)){
    //                    sysMenu.where.rightLike("treeNode",sysId + FieldConstants.TREE_SEPARATOR);
    //                }
    //            }else {
    //                // menu
    //                String[] types = new String[]{"S","M"};
    //                sysMenu.where.in("menuType",types);
    //            }
    //            sysMenu.where.equal("status","0");
    //        }
    //        return this.mapper.selectList(sysMenu);
    //    }else {
    //        // 非渠道管理员
    //        return this.mapper.selectMenuByUser(type,isAdmin,tenantId, SecurityUtils.getUserId(),menuName,status);
    //    }
    //}

    //@Override
    //public List<SysMenu> getMenuFun(Integer sysId, String menuName, String status){
    //    return this.getMenus("funMenu",sysId, menuName,status);
    //}
    //
    ///**
    // * 获取菜单Options 状态在用
    // * @param sysId
    // * @return
    // */
    //@Override
    //public List<SysMenu> getMenuOptions(Integer sysId){
    //    return this.getMenus("menuOptions",sysId, null,"0");
    //}
    //@Override
    //public List<SysMenu> getMenuFunOptions(){
    //    return this.getMenus("funMenuOptions",null, null,null);
    //}
    //
    //
    //
    //
    //@Override
    //public List<Long> getMenuCheckedByRole(long roleId) {
    //    return  mapper.selectMenuCheckedByRole(roleId);
    //}





}
